<?php
namespace app\serveruser\logic;

use \app\manage\logic\BaseLogic;
use \think\Db;

// 应用分类微应用下的逻辑层
class MenuCate extends BaseLogic
{
    protected $name = 'menu_cate';
    protected $config = 'db_config_user';
    private $menuCateModel = '\app\serveruser\model\MenuCate';

    // 增加一个应用分类
    public function add(array $data): array
    {
        // 先查询一下有没有此分类
        if($this->_findByName($data['name'])){
            return verify_err($data, '分类英文名' . $data['name'] . '已经存在');
        }
        $data['status'] = '1';
        $res = $this->model($this->menuCateModel)->save($data);
        return auto_return($res, '成功增加一个应用分类', '增加一个应用分类');
    }
    // 根据一个分类的英文名称来查询是否有此分类
    private function _findByName(string $name): bool
    {
        $id = $this->model($this->menuCateModel)->where(['name'=>$name])->value('id');
        return $id > 0;
    }
    // 停止一个应用分类
    public function stop(array $data): array
    {
        $_where = make_map($data, ['id', 'name']);
        $res = $this->model($this->menuCateModel)->where($_where)->update(['status'=>'0']);
        return auto_return($res, '成功停止一个应用分类', '停止一个应用分类失败');
    }
    // 获取某一应用所有的可用菜单分类列表(不分页)
    public function listByApp(array $data): array
    {
        $_where['app_id'] = $data['app_id'];
        $_where['status'] = '1';
        $list = $this->model($this->menuCateModel)->where($_where)->select();
        return auto_return($list, '成功获取某一应用所有的可用菜单分类列', '获取某一应用所有的可用菜单分类列失败');
    }
    // 获取某一应用所有的可用菜单分类列表(不分页)
    public function listAllByApp(array $data): array
    {
        $_where['app_id'] = $data['app_id'];
        $list = $this->model($this->menuCateModel)->where($_where)->select();
        return auto_return($list, '成功获取某一应用所有的菜单分类列', '获取某一应用所有的菜单分类列失败');
    }
    // 获取所有可用菜单分类
    public function list(array $data): array
    {
        $list = Db::connect(config('db_config_user'))
                ->view('menu_cate', '*')
                ->view('app', ['name'=>'app_name'], 'menu_cate.app_id=app.id', 'LEFT')
                ->where(['menu_cate.status' => 1])
                ->order('menu_cate.app_id')
                ->paginate($data['list_rows'], false, ['page'=>$data['page']])
                ->toArray();
        return auto_return_page($list);
    }
    // 启动一个应用分类
    public function start(array $data): array
    {
        $_where = make_map($data, ['id', 'name']);
        $res = $this->model($this->menuCateModel)->where($_where)->update(['status'=>'1']);
        return auto_return($res, '成功启动一个应用分类', '启动一个应用分类失败');
    }
    // 编辑一个应用分类
    public function edit(array $data): array
    {
        // 先查询一下有没有此分类
        $_where['id'] = $data['id'];
        $save = make_map($data, ['name', 'name_cn']);
        $res = $this->model($this->menuCateModel)->save($save, $_where);
        return auto_return($res, '成功编辑一个应用分类', '编辑一个应用分类失败');
    }
}